const WXAPI = require('apifm-wxapi')

/**
 * type: order 支付订单 recharge 充值 paybill 优惠买单
 * data: 扩展数据对象，用于保存参数
 */
/**
 * 发起微信支付
 * @param {String} type 支付类型，'order'代表支付订单，'paybill'代表优惠买单
 * @param {Number} money 需要支付的金额
 * @param {String} orderId 订单ID，仅在type为'order'时有效
 * @param {String} redirectUrl 支付成功或失败后的重定向URL，可选
 * @param {Object} data 包含支付额外信息的对象，如订单金额等，结构取决于支付类型
 * @returns {无} 无返回值，通过回调函数处理支付结果
 */
function wxpay(type, money, orderId, redirectUrl, data) {
  // 准备支付的基本信息
  const postData = {
    token: wx.getStorageSync('token'), // 用户令牌
    money: money, // 支付金额
    remark: "在线充值", // 支付备注
  }

  // 如果是支付订单
  if (type === 'order') {
    // 设置支付备注为订单号
    postData.remark = "支付订单 ：" + orderId;
    // 设置支付完成后的下一步操作为查看订单详情
    postData.nextAction = {
      type: 0,
      id: orderId
    };
  }

  // 如果是优惠买单
  if (type === 'paybill') {
    // 设置支付备注为优惠买单金额
    postData.remark = "优惠买单 ：" + data.money;
    // 设置支付完成后的下一步操作为用户查看消费记录
    postData.nextAction = {
      type: 4,
      uid: wx.getStorageSync('uid'), // 用户ID
      money: data.money // 优惠买单金额
    };
  }

  // 使用支付备注作为支付名称
  postData.payName = postData.remark;

  // 如果存在下一步操作，将其序列化为字符串
  if (postData.nextAction) {
    postData.nextAction = JSON.stringify(postData.nextAction);
  }

  // 调用API，发起微信支付
  WXAPI.wxpay(postData).then(function (res) {
    if (res.code == 0) {
      // 支付接口调用成功，发起实际的支付请求
      wx.requestPayment({
        timeStamp: res.data.timeStamp,
        nonceStr: res.data.nonceStr,
        package: res.data.package,
        signType: res.data.signType,
        paySign: res.data.paySign,
        fail: function (aaa) {
          // 支付失败的处理
          console.error(aaa)
          wx.showToast({
            title: '支付失败:' + aaa
          })
          if (redirectUrl) {
            wx.redirectTo({
              url: redirectUrl,
            })
          }
        },
        success: function () {
          // 支付成功的处理
          wx.showToast({
            title: '支付成功'
          })
          if (redirectUrl) {
            wx.redirectTo({
              url: redirectUrl,
            })
          }
        }
      })
    } else {
      // 支付接口调用失败，显示错误信息
      wx.showModal({
        title: '出错了',
        content: JSON.stringify(res),
        showCancel: false
      })
    }
  })
}


module.exports = {
  wxpay: wxpay
}
